home *** CD-ROM | disk | FTP | other *** search
/ F1 Licenseware / F1 Licenseware - Volume 1.iso / disks / 049a.dms / 049a.adf / SOURCE_CODE / AJC-BRAINSHAVE.AMOS / AJC-BRAINSHAVE.amosSourceCode next >
AMOS Source Code  |  1993-09-09  |  19KB  |  756 lines

  1. '
  2. '  The Source Code For (pause for dramatic effect)...
  3. '
  4. '  "BRAINSHAVE" By Andrew Campbell 
  5. '
  6. '  A puzzler reviewed in Amiga Force, Amiga Power and even 
  7. '  mentioned in Amiga Format (ooooh! Woooow! Faaab! etc) 
  8. '
  9. '  Please feel free to steal what you like from this game, 
  10. '  including the music, graphics and sound fx (uncopyrighted)! 
  11. '
  12. '
  13. 'I have made a few alterations, so this run on AMos original as well 
  14. 'If you use any of Andrews routines he wants you to credit him.
  15. 'STEVE 
  16.  
  17. Dim MAPXY(20,16),DR(3),DEAD(50)
  18. Global MAPXY(),DR(),DEAD()
  19. Global ACROSS,DWN,FYRED
  20. Global XPOS,YPOS,X1,Y1,X,Y,DR,FREBOB,ANIBOB,EXTRABOB,EXB,XPLOSION$
  21. Global TGET,GOT,MOTION,BALLDR,CLOCK$,TL,LVL,F$,LVS,GRAVITY,EX,DEAD,EV,YA
  22. Global NTB,CONFUSION
  23. Global X,Y,X1,Y1,C,LVL,COUNT,SHOT,SFX,MUS
  24. SFX=0 : MUS=1
  25.  
  26. Dir$="Df0:source_code/"
  27.  
  28. BEGIN:
  29. If MUS=1 : SFX=0 : Erase 5 : Track Load "df0:source_code/MOD.BRAININTRO",5 : End If 
  30. Track Loop On 
  31.  
  32. TSCREEN
  33. If MUS=1 : Track Stop : End If 
  34. If MUS=0 : SFX=0 : End If 
  35.  
  36. If DEAD=1 : DEAD=0 : Goto BEGIN : End If 
  37. Load "BOBS.BRAIN"
  38. If MUS=1 : Erase 5 : Track Load "df0:source_code/MOD.BRAINACID",5 : End If 
  39. 'If SFX=1 : Erase 5 : Load "df0:source_code/SAMS.BRAIN" : End If 
  40. Make Mask 
  41. For I=1 To 30 : Hot Spot I,0,0 : Next I
  42. Priority Reverse On 
  43. LVL=1 : LVS=5
  44.  
  45. RESTART:
  46. Auto View Off 
  47. Default Palette 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  48. Screen Open 1,320,16,8,Lowres : Curs Off : Flash Off : Cls 0 : Hide On 
  49. Screen Display 1,,284,,
  50. Screen Open 0,320,256,32,Lowres
  51. Screen To Front 1
  52. Curs Off : Flash Off : Hide On : Cls 0
  53. Auto View On : View 
  54. LMAP
  55. INIT
  56. Ink 1,0 : LIVES
  57. Double Buffer : Autoback 0 : BODRAW
  58. BALLDR=-1 : TL=130-(LVL*5)
  59. Screen 1
  60.  Ink 2
  61.  Bar 1,2 To 1+TL,14
  62. Fade 1,$0,$FFF,$F0,$80 : Wait 15 : Screen 0
  63. Fade 3 To -1,%11111111111111111111111111111110
  64. DR=3 : FYRED=-1 : FREBOB=13
  65. XPOS=10*16 : YPOS=6*16
  66. Bob 1,XPOS,YPOS,38
  67. For I=0 To 50 : DEAD(I)=0 : Next I
  68. Timer=0
  69. GOT=0
  70. If MUS=1 : Track Play 5 : End If 
  71.  
  72. MLOOP:
  73. K$=""
  74. Clear Key 
  75.  
  76. Do 
  77.  
  78.    K$=Inkey$
  79.  
  80.    XPOS=X Bob(1) : YPOS=Y Bob(1)
  81.    
  82.    If Jup(1) : DR=0 : MOOVE : End If 
  83.    If Jright(1) : DR=1 : MOOVE : End If 
  84.    If Jdown(1) : DR=2 : MOOVE : End If 
  85.    If Jleft(1) : DR=3 : MOOVE : End If 
  86.  
  87.    If Fire(1) : PICKUP : Bob 1,,,38 : End If 
  88.  
  89.    If TGET=GOT
  90.     If SFX=1 : Wait 20 : Sam Play 4 : Wait 70 : End If 
  91.     Fade 1 : Wait 20 : Inc LVL
  92.     If LVL>10 : Unpack 14 To 0 : Screen Close 1 : If MUS=1 : Track Stop : End If : Wait Key : Goto BEGIN : End If 
  93.     If MUS=1 : Track Stop : End If 
  94.     Goto RESTART
  95.    End If 
  96.  
  97.    If TL-Timer/50<0 or(K$=" ") or(DEAD=1)
  98.     For M=0 To 1
  99.     Screen M
  100.     A=$FFF : Fade 1,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A
  101.     Wait 15
  102.     Next M
  103.     Screen Close 1
  104.     Screen 0 : FOUT : Dec LVS
  105.      If LVS=0 : Fade 1 : Wait 15 : If MUS=1 : Track Stop : End If : Goto BEGIN : End If 
  106.      DEAD=0 : If MUS=1 : Track Stop : End If : Goto RESTART
  107.    End If 
  108.  
  109.    If Scancode=69 : Fade 1 : Wait 15 : If MUS=1 : Track Stop : End If : Screen Close 1 : Goto BEGIN : End If 
  110.  
  111.    CLOCK
  112.    
  113. Loop 
  114.  
  115. '----------------
  116. 'THE PRO-SE-DURES
  117. '----------------
  118. Procedure INIT
  119.  
  120. For I=0 To 15 : Channel I To Bob I : Next I
  121.  
  122. XPLOSION$="A 1,(17,2)(18,2)(19,2)(20,2)(21,2)(22,2)(23,2)(42,2)"
  123.  
  124. CLOCK$="A 0,(30,5)(31,5)(32,5)(33,5)(34,5)(35,5)(36,5)(37,5)"
  125.  
  126. End Proc
  127. Procedure LMAP
  128.  
  129. If GRAVITY=0
  130.  F$="BRAINSHAVE/L"+Str$(LVL)-" "+".MAP"
  131. End If 
  132.  
  133. If GRAVITY=1
  134.  F$="BRAINSHAVE/L"+Str$(LVL)-" "+"G.MAP"
  135. End If 
  136.  
  137.  Open In 1,F$
  138.  
  139.  For DWN=0 To 15
  140.   For ACROSS=0 To 19
  141.    Input #1,A
  142.    MAPXY(ACROSS,DWN)=A
  143.   Next ACROSS
  144.  Next DWN
  145.  
  146.  Close 1
  147.  
  148.  FIN
  149.  
  150.  REDRAW
  151.  
  152. End Proc
  153. Procedure REDRAW
  154.  
  155.  For DWN=0 To 15
  156.   For ACROSS=0 To 19
  157.    MX=MAPXY(ACROSS,DWN)
  158.  
  159.    If MX>23 and MX<30 : Goto HELL : End If 
  160.  
  161.    If MX and MX<999
  162.     Ink 5 : Bar(ACROSS*16)+3,(DWN*16)+3 To(ACROSS*16+16)+3,(DWN*16+16)+3
  163.     Paste Bob ACROSS*16,DWN*16,MAPXY(ACROSS,DWN)
  164.    End If 
  165.  
  166.    HELL:
  167.   Next ACROSS
  168.  Next DWN
  169.  
  170. End Proc
  171. Procedure BODRAW
  172.  
  173.  
  174. EXTRABOB=16 : ANIBOB=3 : ENEMIES=0 : TGET=0
  175.  
  176.  For DWN=0 To 15
  177.   For ACROSS=0 To 19
  178.  
  179.     If MAPXY(ACROSS,DWN)>23 and MAPXY(ACROSS,DWN)<30
  180.      Bob EXTRABOB,ACROSS*16,DWN*16,MAPXY(ACROSS,DWN)
  181.      EXTRABOB
  182.      Inc TGET
  183.     End If 
  184.  
  185.   Next ACROSS
  186.  Next DWN
  187.  EXB=EXTRABOB
  188.  
  189. End Proc
  190. Procedure AROUND
  191.  
  192. '
  193. '    0 
  194. ' 3     1   <---------- The Surround System
  195. '    2 
  196. '
  197.  If X1<0 : X1=0 : End If 
  198.  If X1>19 : X1=19 : End If 
  199.  If Y1<0 : Y1=0 : End If 
  200.  If Y1>15 : Y1=15 : End If 
  201.  
  202.  DR(0)=MAPXY(X1,Y1-1)
  203.  DR(1)=MAPXY(X1+1,Y1)
  204.  DR(2)=MAPXY(X1,Y1+1)
  205.  DR(3)=MAPXY(X1-1,Y1)
  206.  
  207.  For I=0 To 3
  208.   If DR(I)<0 : DR(I)=0 : End If 
  209.  Next I
  210.  
  211. End Proc
  212. Procedure EXTRABOB
  213.  Inc EXTRABOB
  214.  If EXTRABOB>59
  215.   EXTRABOB=16
  216.  End If 
  217. End Proc
  218. Procedure FREBOB
  219.  Inc FREBOB
  220.  If SFX=1 : Sam Play 3 : End If 
  221.  If FREBOB>15
  222.   FREBOB=13
  223.  End If 
  224. End Proc
  225. Procedure MOOVE
  226.  
  227.  X1=XPOS/16 : Y1=YPOS/16
  228.  
  229.  If DR=3 and X1=0 or DR=2 and Y1=14 or DR=1 and X1=19 or DR=0 and Y1=0
  230.     Pop Proc
  231.  End If 
  232.  
  233.  If DR=0 : YPOS=YPOS-16 : End If 
  234.  If DR=1 : Add XPOS,16 : End If 
  235.  If DR=2 : Add YPOS,16 : End If 
  236.  If DR=3 : XPOS=XPOS-16 : End If 
  237.  
  238.  Wait Vbl 
  239.  Bob 1,XPOS,YPOS,38
  240.  Wait Vbl 
  241.  Wait Vbl 
  242.  
  243. End Proc
  244. Procedure PICKUP
  245.    
  246.    MX=MAPXY(XPOS/16,YPOS/16)
  247.    
  248.    If MX>23 and MX<30
  249.       Amal 1,"A 0,(38,10)(42,10)"
  250.       Amal On 1
  251.    End If 
  252.    
  253.    X1=XPOS/16 : Y1=YPOS/16
  254.    
  255.    For I=16 To EXB-1
  256.      If DEAD(I)=0 and I>15
  257.       If X Bob(I)=XPOS and Y Bob(I)=YPOS : EXTRABOB=I : Goto HELL : End If 
  258.      End If 
  259.    Next I
  260.    Amal Off(1)
  261.    Pop Proc
  262.    
  263.   HELL:
  264.  
  265.   MOTION=1
  266.    
  267.   Repeat 
  268.  
  269.    X1=XPOS/16 : Y1=YPOS/16
  270.       For I=16 To EXB-1
  271.         If DEAD(I)=0 and I>15
  272.          If X Bob(I)=XPOS and Y Bob(I)=YPOS : EXTRABOB=I : Goto HELLISH : End If 
  273.         End If 
  274.       Next I
  275.     MOTION=0
  276.     Amal Off(1)
  277.    Pop Proc
  278.  
  279.    HELLISH:
  280.  
  281.    If CONFUSION=1
  282.     If I Bob(EXTRABOB)<27 : GRAVITY=1 : End If 
  283.     If I Bob(EXTRABOB)>26 : GRAVITY=0 : End If 
  284.    End If 
  285.  
  286.    If GRAVITY=0
  287.       If BALLDR=-1
  288.          If Jup(1) : BALLDR=0 : If SFX=1 : Sam Play 1 : End If : SLIDE : End If 
  289.          If Jright(1) : BALLDR=1 : If SFX=1 : Sam Play 1 : End If : SLIDE : End If 
  290.          If Jdown(1) : BALLDR=2 : If SFX=1 : Sam Play 1 : End If : SLIDE : End If 
  291.          If Jleft(1) : BALLDR=3 : If SFX=1 : Sam Play 1 : End If : SLIDE : End If 
  292.       End If 
  293.    End If 
  294.  
  295.    If GRAVITY=1
  296.       If BALLDR=-1
  297.          If Jright(1) : BALLDR=1 : DROP : End If 
  298.          If Jleft(1) : BALLDR=3 : DROP : End If 
  299.       End If 
  300.    End If 
  301.  
  302.    CLOCK
  303.    If DEAD=1 : Pop Proc : End If 
  304.       
  305.   Until Fire(1)<>-1
  306.    
  307.   Amal Off(1)
  308.  
  309.   Bob 1,,,38
  310.    
  311. End Proc
  312. Procedure SLIDE
  313.    
  314.    HELL:
  315.  
  316.    If DEAD(EXTRABOB)>0 or EXTRABOB<16 : MOTION=0 : Pop Proc : End If 
  317.  
  318.    Channel 0 To Bob EXTRABOB
  319.    
  320.    X1=X Bob(1)/16 : Y1=Y Bob(1)/16
  321.    MAPXY(X1,Y1)=0
  322.    
  323.    AROUND
  324.    CLOCK
  325.    If DEAD=1 : Pop Proc : End If 
  326.  
  327.    DX=DR(BALLDR)
  328.    
  329.    For J=0 To 3
  330.       If I Bob(EXTRABOB)=DR(J)
  331.          For I=16 To EXB-1
  332.             If DEAD(I)=0
  333.               X=X Bob(I) : Y=Y Bob(I) : AJ=I Bob(I)
  334.             If AJ=I Bob(EXTRABOB)
  335.             If X=XPOS-16 and Y=YPOS or X=XPOS+16 and Y=YPOS or X=XPOS and Y=YPOS-16 or X=XPOS and Y=YPOS+16
  336.               YA=I
  337.               Bob Off(YA)
  338.               DEAD(YA)=1
  339.               Bob FREBOB,X,Y,42 : Amal FREBOB,XPLOSION$ : Amal On FREBOB
  340.               Inc GOT
  341.               FREBOB
  342.               MAPXY(X/16,Y/16)=0
  343.              End If 
  344.            End If 
  345.           End If 
  346.          Next I
  347.               Bob Off(EXTRABOB)
  348.               Bob FREBOB,XPOS,YPOS,42 : Amal FREBOB,XPLOSION$ : Amal On FREBOB
  349.               Inc GOT : FREBOB
  350.               MAPXY(XPOS/16,YPOS/16)=0
  351.               MOTION=0 : BALLDR=-1
  352.               DEAD(EXTRABOB)=1
  353.        Repeat : Until Fire(1)<>-1 : Pop Proc
  354.       End If 
  355.    Next J
  356.    
  357.    If DX>0 : BALLDR=-1 : If SFX=1 : Sam Play 2 : End If : MOTION=0 : MAPXY(X1,Y1)=I Bob(EXTRABOB) : Pop Proc : End If 
  358.    
  359.    If BALLDR=0
  360.       YPOS=YPOS-16
  361.    End If 
  362.    
  363.    If BALLDR=1
  364.       XPOS=XPOS+16
  365.    End If 
  366.    
  367.    If BALLDR=2
  368.       YPOS=YPOS+16
  369.    End If 
  370.    
  371.    If BALLDR=3
  372.       XPOS=XPOS-16
  373.    End If 
  374.    
  375.    Bob EXTRABOB,XPOS,YPOS,I Bob(EXTRABOB)
  376.    Bob 1,XPOS,YPOS,38
  377.    
  378.    X1=X Bob(1)/16 : Y1=Y Bob(1)/16
  379.    MAPXY(X1,Y1)=I Bob(EXTRABOB)
  380.    
  381.    Goto HELL
  382.    
  383. End Proc
  384. Procedure DROP
  385.  
  386.    MOVEME=1
  387.  
  388.    HELL:
  389.  
  390.    If DEAD(EXTRABOB)>0 or EXTRABOB<16 : MOTION=0 : Pop Proc : End If 
  391.  
  392.    Channel 0 To Bob EXTRABOB
  393.    
  394.    X1=X Bob(1)/16 : Y1=Y Bob(1)/16
  395.    MAPXY(X1,Y1)=0
  396.    
  397.    AROUND
  398.    CLOCK
  399.    If DEAD=1 : Pop Proc : End If 
  400.    
  401.    DX=DR(BALLDR)
  402.    
  403.    For J=0 To 3
  404.       If I Bob(EXTRABOB)=DR(J)
  405.          For I=16 To EXB-1
  406.             If DEAD(I)=0
  407.               X=X Bob(I) : Y=Y Bob(I) : AJ=I Bob(I)
  408.             If AJ=I Bob(EXTRABOB)
  409.             If X=XPOS-16 and Y=YPOS or X=XPOS+16 and Y=YPOS or X=XPOS and Y=YPOS-16 or X=XPOS and Y=YPOS+16
  410.               YA=I
  411.               X1=X Bob(YA)/16 : Y1=Y Bob(YA)/16
  412.               AROUND
  413.               Bob Off(YA)
  414.               DEAD(YA)=1
  415.               Bob FREBOB,X,Y,42 : Amal FREBOB,XPLOSION$ : Amal On FREBOB
  416.               Inc GOT
  417.               FREBOB
  418.               MAPXY(X/16,Y/16)=0
  419.  
  420.                If DR(0)>23 and DR(0)<30
  421.                  For V=16 To EXB-1
  422.                    If DEAD(V)=0 and V>15
  423.                       If X Bob(V)/16=X1 and Y Bob(V)/16=Y1-1
  424.                         EX=EXTRABOB
  425.                         EXTRABOB=V
  426.                         DROP_OTHERS
  427.                       End If 
  428.                      End If 
  429.                    Next V
  430.                  EXTRABOB=EX
  431.                End If 
  432.  
  433.                End If 
  434.               End If 
  435.              End If 
  436.          Next I
  437.               Bob Off(EXTRABOB)
  438.               Bob FREBOB,XPOS,YPOS,42 : Amal FREBOB,XPLOSION$ : Amal On FREBOB
  439.               Inc GOT : FREBOB
  440.               MAPXY(XPOS/16,YPOS/16)=0
  441.               MOTION=0 : BALLDR=-1
  442.               DEAD(EXTRABOB)=1
  443.            Pop Proc
  444.         End If 
  445.     Next J
  446.  
  447.  AROUND
  448.  If DX>0 : BALLDR=-1 : MOTION=0 : MAPXY(X1,Y1)=I Bob(EXTRABOB) : Pop Proc : End If 
  449.  
  450. If MOVEME=1
  451.  
  452.    If BALLDR=1
  453.       XPOS=XPOS+16
  454.    End If 
  455.    
  456.    If BALLDR=2
  457.       YPOS=YPOS+16
  458.    End If 
  459.    
  460.    If BALLDR=3
  461.       XPOS=XPOS-16
  462.    End If 
  463. End If 
  464.  
  465.    Wait Vbl 
  466.    Bob EXTRABOB,XPOS,YPOS,I Bob(EXTRABOB)
  467.    Bob 1,XPOS,YPOS,38
  468.    Wait Vbl 
  469.    
  470.    X5=X Bob(1)/16 : Y5=Y Bob(1)/16
  471.    MAPXY(X5,Y5)=I Bob(EXTRABOB)
  472.    EX=EXTRABOB
  473.  
  474.   If DR(0)>23 and DR(0)<30
  475.    I=0
  476.    For I=16 To EXB-1
  477.     If DEAD(I)=0 and I>15
  478.      If X Bob(I)/16=X1 and Y Bob(I)/16=Y1-1
  479.        EX=EXTRABOB
  480.        EXTRABOB=I
  481.        DROP_OTHERS
  482.      End If 
  483.     End If 
  484.    Next I
  485.    EXTRABOB=EX
  486.   End If 
  487.  
  488.    X1=X Bob(1)/16 : Y1=Y Bob(1)/16
  489.    AROUND
  490.  
  491.    If DR(2)=0 : BALLDR=2 : End If 
  492.    
  493.    If BALLDR=2 : Goto HELL : End If 
  494.  
  495.    If MOVEME=1 : MOVEME=0 : Goto HELL : End If 
  496.    BALLDR=-1 : MOTION=0
  497.  
  498. End Proc
  499. Procedure DROP_OTHERS
  500.  
  501.    MOVEME=1
  502.  
  503.    HELL:
  504.    
  505.    Channel 0 To Bob EXTRABOB
  506.    
  507.    X1=X Bob(EXTRABOB)/16 : Y1=Y Bob(EXTRABOB)/16
  508.    X2=X Bob(EXTRABOB) : Y2=Y Bob(EXTRABOB)
  509.    MAPXY(X1,Y1)=0
  510.    BALLDR=2
  511.    
  512.    AROUND
  513.    CLOCK
  514.    If DEAD=1 : Pop Proc : End If 
  515.  
  516.    DX=DR(2)
  517.    
  518.    For J=0 To 3
  519.       If I Bob(EXTRABOB)=DR(J)
  520.          For S=16 To EXB-1
  521.             If DEAD(S)=0
  522.               X=X Bob(S) : Y=Y Bob(S) : AJ=I Bob(S)
  523.             If AJ=I Bob(EXTRABOB)
  524.             If X=X2-16 and Y=Y2 or X=X2+16 and Y=Y2 or X=X2 and Y=Y2-16 or X=X2 and Y=Y2+16
  525.               YA=S
  526.               X1=X Bob(YA)/16 : Y1=Y Bob(YA)/16
  527.               AROUND
  528.               Bob Off(YA)
  529.               DEAD(YA)=1
  530.               Bob FREBOB,X,Y,42 : Amal FREBOB,XPLOSION$ : Amal On FREBOB
  531.               Inc GOT
  532.               FREBOB
  533.               MAPXY(X/16,Y/16)=0
  534.  
  535.             If NTB=0
  536.              If DR(0)>23 and DR(0)<30
  537.                  For Q=16 To EXB-1
  538.                    If DEAD(Q)=0 and Q>15
  539.                       If X Bob(Q)/16=X1 and Y Bob(Q)/16=Y1-1
  540.                         EV=EXTRABOB
  541.                         EXTRABOB=Q
  542.                         Goto HELL
  543.                         NTB=1
  544.                       End If 
  545.                      End If 
  546.                    Next Q
  547.                  EXTRABOB=EV
  548.                End If 
  549.               End If 
  550.  
  551.             End If 
  552.            End If 
  553.           End If 
  554.          Next S
  555.               Bob Off(EXTRABOB)
  556.               Bob FREBOB,X2,Y2,42 : Amal FREBOB,XPLOSION$ : Amal On FREBOB
  557.               Inc GOT : FREBOB
  558.               MAPXY(X2/16,Y2/16)=0
  559.               DEAD(EXTRABOB)=1
  560.               NTB=0
  561.        Pop Proc
  562.       End If 
  563.    Next J
  564.  
  565. If MOVEME=1
  566.  
  567.    If BALLDR=2
  568.       Y2=Y2+16
  569.    End If 
  570.  
  571. End If 
  572.  
  573.   Bob EXTRABOB,X2,Y2,I Bob(EXTRABOB)
  574.  
  575.   X7=X Bob(EXTRABOB)/16 : Y7=Y Bob(EXTRABOB)/16
  576.   MAPXY(X7,Y7)=I Bob(EXTRABOB)
  577.  
  578.   If DR(0)>23 and DR(0)<30
  579.    For Z=16 To EXB-1
  580.     If DEAD(Z)=0 and Z>15
  581.      If X Bob(Z)/16=X1 and Y Bob(Z)/16=Y1-1
  582.        EXTRABOB=Z
  583.        MOVEME=1
  584.        Goto HELL
  585.      End If 
  586.     End If 
  587.    Next Z
  588.   End If 
  589.  
  590.   X1=X Bob(EXTRABOB)/16 : Y1=Y Bob(EXTRABOB)/16
  591.  
  592.   AROUND
  593.  
  594.   If DR(2)=0 : BALLDR=2 : Goto HELL : End If 
  595.  
  596.   If MOVEME=1 : MOVEME=0 : Goto HELL : End If 
  597.  
  598.   NTB=0
  599.  
  600. End Proc
  601. Procedure CLOCK
  602.  
  603.  Screen 1
  604.  
  605.  Ink 3
  606.  Draw(1+TL-Timer/50),2 To(1+TL-Timer/50),14
  607.  If TL-Timer/50<0 : DEAD=1 : End If 
  608.  
  609.  Screen 0
  610.  
  611. End Proc
  612. Procedure LIVES
  613.  Screen 1
  614.  Ink 1,0
  615.  Paste Bob 250,0,38
  616.  Text 270,10,"x"+Str$(LVS)-" "
  617.  Screen 0
  618. End Proc
  619. Procedure TSCREEN
  620.  
  621.   GRAVITY=0 : CONFUSION=0
  622.  
  623.   Unpack 15 To 0
  624.   If MUS=1 : STILLHERE=1 : Track Play 5 : End If 
  625.  
  626.   SC$="B R A I N  S H A V E        | Written by Andrew Campbell using AMOS Professional and AMOS Professional Compiler by Europress Software.          How to play...                     "
  627.   SC$=SC$+"Brain Shave is the sequel to Enigma, a public domain game available on The Funhouse disk (along with Thundertron and Imagine Slideshow 2) and in the incredible Assassin's collection.          Those of you who have played Enigma (or"
  628.   SC$=SC$+" White Rabbits) will find this concept frighteningly easy to get to grips with.       The object of the game is to match up all the coloured tiles by dragging them around the screen using the joystick-controlled cursor.          "
  629.   SC$=SC$+" To pick up a tile and move it, simply press and hold fire down, then move the stick left/right/up/down and (if the block is free to move in that direction) you will be able to guide the blocks into collision.       Sounds a bit "
  630.   SC$=SC$+"complicated?      I assure you, this game dead simple.     Be warned that the EASY level contains a Zeus/Puzznik-style gravity system where the blocks will fall if they have nothing underneath them to support them!           "
  631.   SC$=SC$+"  Fans of Enigma (if there are any out there) will be pleased to know I have conjured up another nice collection of brain-teasters in a similar mould.      I hope you enjoy the special effects and the silly sound FX as well as "
  632.   SC$=SC$+"the game it's self.      If anyone has any comments or anything would they please write to me : AJC, 4 Alloe Field Place, Illingworth, Halifax, HX2 9ES  (okay, since you read the scroller this far - press F4 for a good laugh)         "
  633.   SC$=SC$+" You can be sure of a swift reply from me, even if you take the mickey out of my PD games!      Just write will you?          I'll send you some of my other PD games on request!                      Just time for a quick bit"
  634.   SC$=SC$+" of traditional scrolling greetings I suppose.        Best wishes go out to the following playtesters, associates and best friends :   Tony K, Keith M, Munaver K, Zaheer I, Jonathan C, Neale 'Doctor Roney' G, Graeme 'Professor' V, "
  635.   SC$=SC$+" Chris 'A1200' S, Chris 'the big one', Michelle F, Nicola B, Jason 'Mushroom' S, Maureen 'English Teacher' W (haha! Gotcha miss), Jenny 'I've vanished' B, Lee 'nutter' H, Paul S, Jeremy 'Warhammer 40,000' and millions more that I"
  636.   SC$=SC$+" just happened to forget.        Including you - the reader of this incredibly boring scrolly.   Haven't you anything better to do?          Lets wrap this bummer up shall we?           Here we go!                                      "
  637.  
  638.   Def Scroll 1,1,235 To 320,250,-2,0
  639.   CPOS=1
  640.   Set Text 2
  641.   Ink 1,0
  642.   Hide On 
  643.  
  644.  HEAVEN:
  645.  K$=""
  646.  Clear Key 
  647.  
  648.  Repeat 
  649.   K$=Inkey$
  650.  For I=1 To 2
  651.   Wait Vbl 
  652.   Scroll 1
  653.  Next I
  654.   Add PC,4
  655.    If PC>5
  656.     E$=Mid$(SC$,CPOS,1)
  657.     If E$="|" : Wait 50 : Else Ink 16,0 : Text 312,246,E$ : Ink 1,0 : Text 309,241,E$ : End If 
  658.     PC=0
  659.     Inc CPOS
  660.     If CPOS>Len(SC$) : CPOS=1 : End If 
  661.    End If 
  662.  Until K$<>""
  663.  
  664.  SC=Scancode
  665.  
  666.  If Upper$(K$)="M" and MUS=1 : MUS=0 : STILLHERE=1 : Track Stop : Goto HEAVEN : End If 
  667.  If Upper$(K$)="M" and MUS=0
  668.  If STILLHERE=0
  669.   SFX=0 : Erase 5 : Track Load "FH1:MOD.BRAININTRO",5
  670.  End If 
  671.   MUS=1 : Track Play 5 : Goto HEAVEN
  672.  End If 
  673.  
  674.  
  675.  If SC=95 : HELP : Clear Key : End If 
  676.  If SC=80 : GRAVITY=1 : Goto HELL : End If 
  677.  If SC=81 : GRAVITY=0 : Goto HELL : End If 
  678.  If SC=84 : Shift Up 5,0,1,1 : End If 
  679.  If SC=69 : Edit : End If 
  680.  
  681.  Goto HEAVEN
  682.  
  683.  HELL:
  684.  A=$FFF
  685.  Fade 1,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A
  686.  Wait 15
  687.  FOUT
  688.  
  689. End Proc
  690. Procedure FIN
  691.  
  692.  A=$FFF
  693.  Fade 4,0,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A
  694.  Ink 4
  695.  For I=130 To 0 Step -1
  696.   Box I,I To 320-I,256-I
  697.  Next I
  698.  
  699. End Proc
  700. Procedure FOUT
  701.  
  702.    For J=1 To 7
  703.     Bob Off 
  704.     Cls 2
  705.     Screen Swap 
  706.    Next J
  707.  
  708.     Fade 1,$0
  709.     Wait 15
  710.     Ink 0
  711.     Fade 7
  712.  
  713.    For I=0 To 140
  714.     Box I,I To 320-I,256-I : Screen Swap 
  715.     Box I,I To 320-I,256-I
  716.    Next I
  717.  
  718. End Proc
  719. Procedure HELP
  720.  
  721.  Screen Open 2,640,200,2,Hires
  722.  Curs Off : Cls 0
  723.  Colour 1,$FFF
  724.  Paper 0 : Pen 1
  725.  
  726.   Locate 0,2 : Centre "BRAIN SHAVE HELP SCREEN"
  727.   Locate 0,5 : Centre "For those of you having problems, here's a bit of help with colours "
  728.   Locate 0,6 : Centre "of blocks on the various levels. On the Gravity level, all blocks   "
  729.   Locate 0,7 : Centre "drop when there's nothing underneath them. On the Slider level, they"
  730.   Locate 0,8 : Centre "continue moving in one direction until they hit something.          "
  731.  
  732.  Locate 0,10 : Centre "Some levels require you to knock away three blocks at a time. This  "
  733.  Locate 0,11 : Centre "is the trickiest part of the game and demands logical thinking and  "
  734.  Locate 0,12 : Centre "fast reflexes. Be warned : if you match up two blocks of the same   "
  735.  Locate 0,13 : Centre "colour when there are three on the screen, you will be unable to do "
  736.  Locate 0,14 : Centre "the puzzle successfully. Oh, and there are 20 levels altogether.    "
  737.  
  738.  Locate 0,16 : Centre "And here are some keyboard options to help you : HELP - this screen."
  739.  Locate 0,17 : Centre "SPACE - Restart puzzle (and lose a life)   ESC - Quit current game."
  740.  
  741.  Locate 0,19 : Centre "                                                              - AJC "
  742.  
  743.  Clear Key 
  744.  
  745.  K$=""
  746.  Repeat 
  747.  K$=Inkey$
  748.  Until Mouse Key or(Fire(1)) or(K$<>"")
  749.  
  750.  HELLO:
  751.  Screen Close 2
  752.  
  753. End Proc
  754. '----------------  
  755. 'THE END OF ALL! 
  756. '----------------